home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 97 / CD-ROM 97 / CD-ROM 97.iso / internet / ghostzilla / ghsetup.exe / chrome / comm.jar / content / editor / EditorPublishSettings.js < prev    next >
Encoding:
JavaScript  |  2002-04-09  |  9.3 KB  |  352 lines

  1. /*
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  *
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  *
  12.  * The Original Code is Mozilla Communicator client code, released
  13.  * March 31, 1998.
  14.  *
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation. Portions created by Netscape are
  17.  * Copyright (C) 2001 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  *
  20.  * Contributor(s):
  21.  */
  22.  
  23. var gPublishSiteData;
  24. var gPublishDataChanged = false;
  25. var gDefaultSiteIndex = -1;
  26. var gDefaultSiteName;
  27. var gPreviousDefaultSite;
  28. var gPreviousTitle;
  29. var gSettingsChanged = false;
  30. var gSiteDataChanged = false;
  31. var gAddNewSite = false;
  32. var gCurrentSiteIndex = -1;
  33.  
  34. // Dialog initialization code
  35. function Startup()
  36. {
  37.   if (!InitEditorShell()) return;
  38.  
  39.   gDialog.SiteList            = document.getElementById("SiteList");
  40.   gDialog.SiteNameInput       = document.getElementById("SiteNameInput");
  41.   gDialog.PublishUrlInput     = document.getElementById("PublishUrlInput");
  42.   gDialog.BrowseUrlInput      = document.getElementById("BrowseUrlInput");
  43.   gDialog.UsernameInput       = document.getElementById("UsernameInput");
  44.   gDialog.PasswordInput       = document.getElementById("PasswordInput");
  45.   gDialog.SavePassword        = document.getElementById("SavePassword");
  46.   gDialog.SetDefaultButton    = document.getElementById("SetDefaultButton");
  47.   gDialog.RemoveSiteButton    = document.getElementById("RemoveSiteButton");
  48.   gDialog.OkButton            = document.documentElement.getButton("accept");
  49.  
  50.   gPublishSiteData = GetPublishSiteData();
  51.   gDefaultSiteName = GetDefaultPublishSiteName();
  52.   gPreviousDefaultSite = gDefaultSiteName;
  53.  
  54.   InitDialog();
  55.  
  56.   SetWindowLocation();
  57. }
  58.  
  59. function InitDialog()
  60. {
  61.   // If there's no current site data, start a new item in the Settings panel
  62.   if (!gPublishSiteData)
  63.   {
  64.     AddNewSite();
  65.   }
  66.   else
  67.   {
  68.     FillSiteList();
  69.     InitSiteSettings(gDefaultSiteIndex);
  70.     SetTextboxFocus(gDialog.SiteNameInput);
  71.   }
  72. }
  73.  
  74. function FillSiteList()
  75. {
  76.   // Prevent triggering SelectSiteList() actions
  77.   gIsSelecting = true;
  78.   ClearListbox(gDialog.SiteList);
  79.   gIsSelecting = false;
  80.   gDefaultSiteIndex = -1;
  81.  
  82.   // Fill the site list
  83.   var count = gPublishSiteData.length;
  84.   for (var i = 0; i < count; i++)
  85.   {
  86.     var name = gPublishSiteData[i].siteName;
  87.     var item = gDialog.SiteList.appendItem(name);
  88.     SetPublishItemStyle(item);
  89.     if (name == gDefaultSiteName)
  90.       gDefaultSiteIndex = i;
  91.   }
  92. }
  93.  
  94. function SetPublishItemStyle(item)
  95. {
  96.   // Add a cell before the text to display a check for default site
  97.   if (item)
  98.   {
  99.     if (item.label == gDefaultSiteName)
  100.       item.setAttribute("class", "bold");
  101.     else
  102.       item.removeAttribute("class");
  103.   }
  104. }
  105.  
  106. function AddNewSite()
  107. {
  108.   // Save any pending changes locally first
  109.   if (!ApplyChanges())
  110.     return;
  111.  
  112.   // Initialize Setting widgets to none of the selected sites
  113.   InitSiteSettings(-1);
  114.   gAddNewSite = true;
  115.  
  116.   SetTextboxFocus(gDialog.SiteNameInput);
  117. }
  118.  
  119. function RemoveSite()
  120. {
  121.   if (!gPublishSiteData)
  122.     return;
  123.  
  124.   var index = gDialog.SiteList.selectedIndex;
  125.   var item;
  126.   if (index != -1)
  127.   {
  128.     item = gDialog.SiteList.selectedItems[0];
  129.     var nameToRemove = item.getAttribute("label");
  130.  
  131.     // Remove one item from site data array
  132.     gPublishSiteData.splice(index, 1);
  133.     // Remove item from site list
  134.     gDialog.SiteList.clearSelection();
  135.     gDialog.SiteList.removeItemAt(index);
  136.  
  137.     // Adjust if we removed last item and reselect a site
  138.     if (index >= gPublishSiteData.length)
  139.       index--;
  140.     InitSiteSettings(index);
  141.  
  142.     if (nameToRemove == gDefaultSiteName)
  143.     {
  144.       // Deleting current default -- set to new selected item
  145.       //  Arbitrary, but what else to do?
  146.       SetDefault();
  147.     }
  148.     gSiteDataChanged = true;
  149.   }
  150. }
  151.  
  152. function SetDefault()
  153. {
  154.   if (!gPublishSiteData)
  155.     return;
  156.  
  157.   var index = gDialog.SiteList.selectedIndex;
  158.   if (index != -1)
  159.   {
  160.     gDefaultSiteIndex = index;
  161.     gDefaultSiteName = gPublishSiteData[index].siteName;
  162.     
  163.     // Set bold style on new default
  164.     var item = gDialog.SiteList.firstChild;
  165.     while (item)
  166.     {
  167.       SetPublishItemStyle(item);
  168.       item = item.nextSibling;
  169.     }
  170.   }
  171. }
  172.  
  173. // Recursion prevention:
  174. // Use when you don't want to trigger ApplyChanges and InitSiteSettings
  175. var gIsSelecting = false;
  176.  
  177. function SelectSiteList()
  178. {
  179.   if (gIsSelecting)
  180.     return;
  181.  
  182.   gIsSelecting = true;
  183.   var newIndex = gDialog.SiteList.selectedIndex;
  184.  
  185.   // Save any pending changes locally first
  186.   if (!ApplyChanges())
  187.     return;
  188.  
  189.   InitSiteSettings(newIndex);
  190.  
  191.   gIsSelecting = false;
  192. }
  193.  
  194. // Use this to prevent recursion in SelectSiteList
  195. function SetSelectedSiteIndex(index)
  196. {
  197.   gIsSelecting = true;
  198.   gDialog.SiteList.selectedIndex = index;
  199.   gIsSelecting = false;
  200. }
  201.  
  202. function InitSiteSettings(selectedSiteIndex)
  203. {  
  204.   // Index to the site we will need to update if settings changed
  205.   gCurrentSiteIndex = selectedSiteIndex;
  206.   
  207.   var savePassord = false;
  208.  
  209.   SetSelectedSiteIndex(selectedSiteIndex);
  210.   var haveData = (gPublishSiteData && selectedSiteIndex != -1);
  211.  
  212.   gDialog.SiteNameInput.value = haveData ? gPublishSiteData[selectedSiteIndex].siteName : "";
  213.   gDialog.PublishUrlInput.value = haveData ? gPublishSiteData[selectedSiteIndex].publishUrl : "";
  214.   gDialog.BrowseUrlInput.value = haveData ? gPublishSiteData[selectedSiteIndex].browseUrl : "";
  215.   gDialog.UsernameInput.value = haveData ? gPublishSiteData[selectedSiteIndex].username : "";
  216.   gDialog.PasswordInput.value = haveData ? gPublishSiteData[selectedSiteIndex].password : "";
  217.   gDialog.SavePassword.checked = haveData ? gPublishSiteData[selectedSiteIndex].savePassword : false;
  218.  
  219.   gDialog.SetDefaultButton.disabled = !haveData;
  220.   gDialog.RemoveSiteButton.disabled = !haveData;
  221.   gSettingsChanged = false;
  222. }
  223.  
  224. function onInputSettings()
  225. {
  226.   // TODO: Save current data during SelectSite1 and compare here
  227.   //       to detect if real change has occurred?
  228.   gSettingsChanged = true;
  229. }
  230.  
  231. function ApplyChanges()
  232. {
  233.   if (gSettingsChanged && !UpdateSettings())
  234.   {
  235.     // Restore selection to previously current site
  236.     SetSelectedSiteIndex(gCurrentSiteIndex);
  237.     return false;
  238.   }
  239.   return true;
  240. }
  241.  
  242. function UpdateSettings()
  243. {
  244.   // Validate and add new site
  245.   var newName = TrimString(gDialog.SiteNameInput.value);
  246.   if (!newName)
  247.   {
  248.     ShowInputErrorMessage(GetString("MissingSiteNameError"), gDialog.SiteNameInput);
  249.     return false;
  250.   }
  251.   if (PublishSiteNameExists(newName, gPublishSiteData, gCurrentSiteIndex))
  252.   {
  253.     ShowInputErrorMessage(GetString("DuplicateSiteNameError").replace(/%name%/, newName));            
  254.     SetTextboxFocus(gDialog.SiteNameInput);
  255.     return false;
  256.   }
  257.  
  258.   var newUrl = FormatUrlForPublishing(gDialog.PublishUrlInput.value);
  259.   if (!newUrl)
  260.   {
  261.     ShowInputErrorMessage(GetString("MissingPublishUrlError"), gDialog.PublishUrlInput);
  262.     return false;
  263.   }
  264.  
  265.   // Start assuming we're updating existing site at gCurrentSiteIndex
  266.   var newSiteData = false;
  267.  
  268.   if (!gPublishSiteData)
  269.   {
  270.     // First time used - Create the first site profile
  271.     gPublishSiteData = new Array(1);
  272.     gCurrentSiteIndex = 0;
  273.     newSiteData = true;
  274.   }
  275.   else if (gCurrentSiteIndex == -1)
  276.   {
  277.     // No currently-selected site,
  278.     //  must be adding a new site
  279.     // Add new data at the end of list
  280.     gCurrentSiteIndex = gPublishSiteData.length;
  281.     newSiteData = true;
  282.   }
  283.     
  284.   if (newSiteData)
  285.   {
  286.     // Init new site profile
  287.     gPublishSiteData[gCurrentSiteIndex] = {};
  288.     gPublishSiteData[gCurrentSiteIndex].docDir = "";
  289.     gPublishSiteData[gCurrentSiteIndex].otherDir = "";
  290.     gPublishSiteData[gCurrentSiteIndex].dirList = [""];
  291.   }
  292.  
  293.   gPublishSiteData[gCurrentSiteIndex].siteName = newName;
  294.   gPublishSiteData[gCurrentSiteIndex].publishUrl = newUrl;
  295.   gPublishSiteData[gCurrentSiteIndex].browseUrl = FormatUrlForPublishing(gDialog.BrowseUrlInput.value);
  296.   gPublishSiteData[gCurrentSiteIndex].username = TrimString(gDialog.UsernameInput.value);
  297.   gPublishSiteData[gCurrentSiteIndex].password= gDialog.PasswordInput.value;
  298.   gPublishSiteData[gCurrentSiteIndex].savePassword = gDialog.SavePassword.checked;
  299.  
  300.   if (gCurrentSiteIndex == gDefaultSiteIndex)
  301.     gDefaultSiteName = newName;
  302.  
  303.   // When adding the very first site, assume that's the default
  304.   if (gPublishSiteData.length == 1 && !gDefaultSiteName)
  305.   {
  306.     gDefaultSiteName = gPublishSiteData[0].siteName;
  307.     gDefaultSiteIndex = 0;
  308.   }
  309.  
  310.   FillSiteList();
  311.  
  312.   // Select current site in list  
  313.   SetSelectedSiteIndex(gCurrentSiteIndex);
  314.  
  315.   // Signal saving data to prefs
  316.   gSiteDataChanged = true;
  317.   
  318.   // Clear current site flags
  319.   gSettingsChanged = false;
  320.   gAddNewSite = false;
  321.  
  322.   return true;
  323. }
  324.  
  325.  
  326. function doHelpButton()
  327. {
  328.   openHelp("comp-doc-publish-site-settings");
  329. }
  330.  
  331. function onAccept()
  332. {
  333.   // Save any pending changes locally first
  334.   if (!ApplyChanges())
  335.     return false;
  336.  
  337.   if (gSiteDataChanged)
  338.   {
  339.     // Save all local data to prefs
  340.     SavePublishSiteDataToPrefs(gPublishSiteData, gDefaultSiteName);
  341.   }
  342.   else if (gPreviousDefaultSite != gDefaultSiteName)
  343.   {
  344.     // only the default site was changed
  345.     SetDefaultSiteName(gDefaultSiteName);
  346.   }
  347.  
  348.   SaveWindowLocation();
  349.  
  350.   return true;
  351. }
  352.